//
// Created by Lenovo on 2021/12/22.
//

#ifndef LINKLIST_QUEUE_LINKLIST_QUEUE_H
#define LINKLIST_QUEUE_LINKLIST_QUEUE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>




enum Status{OK=1,ERROR=-2,TRUE=1,FALSE=0,EMPTY=-1,OVERFLOW=-3};
typedef enum Status Status;

typedef int SElemType;  //自定义元素类型

typedef struct QNode{
    SElemType data;
    struct QNode *next;
}QNode;

typedef struct {

    QNode *Head;    //在队列构造之前和销毁之后，base的值为NULL
    QNode *Tail;     //队头指针
    int QueueSize;      //当前已分配的存储空间，以元素为单位
}LinkQueue;

Status InitQueue(LinkQueue *Q);   //构造一个空队
Status DestroyQueue(LinkQueue *Q);    //销毁队Q，Q不再存在
Status ClearQueue(LinkQueue *Q);  //把Q置为空队
Status QueueEmpty(LinkQueue Q);   //若Q为空队返回TRUE，否则返回FALSE
int QueueLength(LinkQueue Q);     //返回Q的元素个数，即队的长度
SElemType GetHead(LinkQueue Q);  //若队不空，则返回队头元素，否则返回NULL
Status EnQueue(LinkQueue *Q,SElemType e);    //插入元素e为
SElemType DeQueue(LinkQueue *Q);  //若队不空，则删除队头元素并返回，否则返回
Status QueueTraverse(LinkQueue Q,Status (*visit)(SElemType));     //从队尾到队头一次对队中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

#endif //LINKLIST_QUEUE_LINKLIST_QUEUE_H
